Første tester¶
Jeg bruker trimesh, som er et ganske omfattende meshverktøy i Python. Deretter lager jeg en funksjon som:
- Importerer en meshfil (i vårt tilfelle vil det være STL-filer).
- Setter en farge på alle polygonene.
- Oppretter en scene med meshet. Som standard vises bare overflaten og ikke kantene eller punktene, men det er mulig å legge til i scenen. Andre instillinger som lys og kamera kan også settes, men jeg har foreløpig ikke gjort noe med dette.
Denne funksjonen gir et utgangspunkt for senere justeringer. Hvis vi for eksempel vil framheve hvor avviket er størst, kan vi bruke denne funksjonen. Det hadde også vært interessant (men kanskje vanskelig) å lage en slider for enkel sammenligning av to mesh.
Her er koden til funksjonen:
import trimesh
def load_mesh_scene(filename, show_edges=False):
mesh = trimesh.load(filename)
color = [128, 176, 255, 255]
mesh.visual.face_colors = color
geometries = [mesh]
if show_edges:
edges = mesh.face_adjacency_edges
path = trimesh.path.Path3D(**trimesh.path.exchange.misc.edges_to_path(edges, mesh.vertices.copy()))
geometries.append(path)
scene = trimesh.Scene(geometries)
return scene
Videre har jeg brukt Heightmap meshing utility til å konvertere heightmapet Obsidian.png til følgende meshfiler:
| Fil | Antall polygoner | Fil- størrelse | Vurdering |
|---|---|---|---|
| Obsidian5m.stl | 5 millioner | 70.8 MB | Brukes som referanse |
| Obsidian10k.stl | 10k | 0.52 MB | Ingen fine detaljer |
| Obsidian40k.stl | 40k | 2 MB | Detaljer begynner å komme frem |
| Obsidian80k.stl | 80k | 4.1 MB | De fleste detaljer er til stede |
| Obsidian150k.stl | 150k | 7.6 MB | Omtrent som referanse |
Vurderingene her er på øyemål og må derfor tas med en stor klype salt. Ideelt sett ønsker jeg å lage noen funksjoner som på en god måte kan visualisere forskjellen mellom referansen og de komprimerte meshfilene.
Dere kan se resultatene under (venstre musknapp for rotasjon, høyre museknapp for translasjon).
mesh1 = load_mesh_scene("Obsidian5m.stl")
mesh1.show()